home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 008 / ranmusic.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-04-24  |  6.7 KB  |  262 lines

  1. 1000  ' *****RANDOM MUSIC********
  2. 1010  ' *****VERSION 1.0*********
  3. 1020  ' ******BY JAMES EDMUNDS******
  4. 1030  ' ******Source Mail:BCA034****
  5. 1040  CLS: KEY OFF
  6. 1050  COLOR 7,0
  7. 1060  LOCATE 6,10:PRINT STRING$(60,14)
  8. 1070  LOCATE 18,10:PRINT STRING$(60,14)
  9. 1080  FOR J=6 TO 18
  10. 1090  LOCATE J,10:PRINT CHR$(14)
  11. 1100  LOCATE J,70:PRINT CHR$(14)
  12. 1110  NEXT
  13. 1120  LOCATE 8,28:PRINT "R A N D O M    M U S I C";
  14. 1130  LOCATE 10,32:PRINT "by James Edmunds*";
  15. 1140  LOCATE 14, 34:PRINT "Version 1.0";
  16. 1150  LOCATE 17,12:PRINT "*[Source ID:BCA034]";
  17. 1160  ' Random music graphics
  18. 1170  FOR RG=1 TO 4
  19. 1180  COLOR 15,0
  20. 1190  LOCATE 6,37:PRINT CHR$(14);
  21. 1200  PLAY "l2a+"
  22. 1210      FOR DELAY=1 TO 300:NEXT DELAY
  23. 1220  COLOR 7,0
  24. 1230  LOCATE 6,37:PRINT CHR$(14);
  25. 1240  COLOR 15,0
  26. 1250  LOCATE 12,10:PRINT CHR$(14);
  27. 1260  PLAY "l16d"                                                      
  28. 1270     FOR DELAY=1 TO 300:NEXT DELAY
  29. 1280  COLOR 7,0
  30. 1290  LOCATE 12,10:PRINT CHR$(14);
  31. 1300  COLOR 15,0
  32. 1310  LOCATE 18,53:PRINT CHR$(14);
  33. 1320  PLAY "l4c
  34. 1330     FOR DELAY=1 TO 300:NEXT DELAY
  35. 1340  COLOR 7,0
  36. 1350  LOCATE 18,53:PRINT CHR$(14);
  37. 1360  COLOR 15,0
  38. 1370  LOCATE 9,70:PRINT CHR$(14);
  39. 1380  PLAY "l8f+"                                                      
  40. 1390      FOR DELAY=1 TO 300:NEXT DELAY
  41. 1400  COLOR 7,0
  42. 1410  LOCATE 9,70:PRINT CHR$(14);
  43. 1420  NEXT RG
  44. 1430  FOR DELAY=1 TO 500:NEXT DELAY
  45. 1440  CLS
  46. 1450  '
  47. 1460  '
  48. 1470  ' goto first explanation screen
  49. 1480  '
  50. 1490  '
  51. 1500  LOCATE 8
  52. 1510  PRINT "     RANDOM MUSIC is a program that allows you to have the IBM
  53. 1520  PRINT "Personal Computer play randomly generated music. You will be asked
  54. 1530  PRINT "to set the tempo, duration, and scale-weighting of the random
  55. 1540  PRINT "music that the computer will generate. You'll do so by simply
  56. 1542  PRINT "PRESSING the letter corresponding to your choice.
  57. 1550  PRINT
  58. 1560  PRINT "     With the screens that ask you to set these parameters, there
  59. 1570  PRINT "are help screens available. To see a help screen, simply type <H>
  60. 1580  PRINT "and an explanation will appear.
  61. 1590  LOCATE 23:PRINT "        Press the space bar to continue....";
  62. 1600  ZZZ$=INKEY$:IF ZZZ$="" THEN GOTO 1600
  63. 1610  CLS
  64. 2000  '
  65. 2010  CLS
  66. 2020  ' first screen    set tempo
  67. 2030  COLOR 1,7,0:LOCATE 3,24:PRINT "T E M P O";
  68. 2040  COLOR 15,0:LOCATE 5,24:PRINT "S";
  69. 2050  COLOR 7,0:LOCATE 5,30:PRINT "Slow";
  70. 2060  COLOR 15,0:LOCATE 7,24:PRINT "M";
  71. 2070  COLOR 7,0:LOCATE 7,30:PRINT "Medium";
  72. 2080  COLOR 15,0:LOCATE 9,24:PRINT "F";
  73. 2090  COLOR 7,0:LOCATE 9,30:PRINT "Fast";
  74. 2100  LOCATE 10,24:PRINT "_______________";
  75. 2110  COLOR 15,0:LOCATE 12,24:PRINT "H";
  76. 2120  COLOR 7,0:LOCATE 12,30:PRINT "Help";
  77. 2130  '
  78. 2140  ' get choice
  79. 2150  '
  80. 2160  T$=INKEY$:IF T$="" THEN GOTO 2160
  81. 2170  IF T$="S" OR T$="s" THEN PLAY "T60":GOTO 3000
  82. 2180  IF T$="M" OR T$="m" THEN PLAY "T120":GOTO 3000
  83. 2190  IF T$="F" OR T$="f" THEN PLAY "T200":GOTO 3000
  84. 2200  IF T$="H" OR T$="h" THEN GOTO 2300
  85. 2210  GOTO 2160
  86. 2300  ' help screen
  87. 2310  COLOR 0,7:LOCATE 12,10
  88. 2320  PRINT "              EXPLANATION:                 ";
  89. 2330  COLOR 7,0:LOCATE 14,10:PRINT "    The tempo of the music represents the";
  90. 2340  LOCATE 15,10:PRINT "number of beats per second. In our random";
  91. 2350  LOCATE 16,10:PRINT "music, `Slow' is 60 beats per second;";
  92. 2360  LOCATE 17,10:PRINT "`Medium' is 120 beats per second; and";
  93. 2370  LOCATE 18,10:PRINT "`Fast' is 200 beats per second.";
  94. 2380  GOTO 2160
  95. 3000  '
  96. 3010  ' get duration
  97. 3020  '
  98. 3030  CLS
  99. 3040  COLOR 1,7,0:LOCATE 3,24
  100. 3050  PRINT "D U R A T I O N";
  101. 3060  COLOR 15,0:LOCATE 5,24:PRINT "S";
  102. 3070  COLOR 7,0:LOCATE 5,30:PRINT "Short";
  103. 3080  COLOR 15,0:LOCATE 7,24:PRINT "M";
  104. 3090  COLOR 7,0:LOCATE 7,30:PRINT "Medium";
  105. 3100  COLOR 15,0:LOCATE 9,24:PRINT "L";
  106. 3110  COLOR 7,0:LOCATE 9,30:PRINT "Long";
  107. 3120  LOCATE 10,24:PRINT "_____________";
  108. 3130  COLOR 15,0:LOCATE 12,24:PRINT "H";
  109. 3140  COLOR 7,0:LOCATE 12,30:PRINT "Help";
  110. 3150  D$=INKEY$:IF D$="" THEN GOTO 3150
  111. 3160  IF D$="S" OR D$="s" THEN DD=25:GOTO 4000
  112. 3170  IF D$="M" OR D$="m" THEN DD=75:GOTO 4000
  113. 3180  IF D$="L" OR D$="l" THEN DD=150:GOTO 4000
  114. 3190  IF D$="H" OR D$="h" THEN GOTO  3300
  115. 3200  GOTO 3150
  116. 3300  ' duration help screen
  117. 3310  '
  118. 3320  COLOR 0,7:LOCATE 12,10
  119. 3330  PRINT "                EXPLANATION:               ";
  120. 3340  COLOR 7,0
  121. 3350  LOCATE 14,10:PRINT "     The duration of the random music is simply";
  122. 3360  LOCATE 15,10:PRINT "the number of notes (and pauses, or rests) that";
  123. 3370  LOCATE 16,10:PRINT "will be played. A `Short' piece will have 25 notes;";
  124. 3380  LOCATE 17,10:PRINT "a `Medium' piece will have 75 notes; and a `Long'";
  125. 3390  LOCATE 18,10:PRINT "piece will have 150 notes.";
  126. 3400  GOTO 3150
  127. 4000  '  scale weight selection
  128. 4010  '
  129. 4020  CLS
  130. 4030  COLOR 1,7,0:LOCATE 3,24
  131. 4040  PRINT "S C A L E  W E I G H T";
  132. 4050  COLOR 15,0: LOCATE 5,24:PRINT "C";
  133. 4060  COLOR 7,0: LOCATE 5,30:PRINT "Center-weighted";
  134. 4070  COLOR 15,0:LOCATE 7,24:PRINT "F";
  135. 4080  COLOR 7,0:LOCATE 7,30: PRINT "Fully random";
  136. 4090  LOCATE 8,24:PRINT "___________________";
  137. 4100  COLOR 15,0:LOCATE 10,24:PRINT "H";
  138. 4110  COLOR 7,0:LOCATE 10,30:PRINT "Help";
  139. 4120  '
  140. 4130  'get choice
  141. 4140  '
  142. 4150  DIST$=INKEY$:IF DIST$="" THEN GOTO 4150
  143. 4160  IF DIST$="F" OR DIST$="f" THEN DIST$="F":GOTO 5000
  144. 4170  IF DIST$="c" OR DIST$="C" THEN DIST$="C":GOTO 5000
  145. 4180  IF DIST$="H" OR DIST$="h" THEN GOTO 4300
  146. 4190  GOTO 4150
  147. 4300  '
  148. 4310  'help screen
  149. 4320  '
  150. 4330  COLOR 0,7:LOCATE 10,10
  151. 4340  PRINT "                        EXPLANATION:                 ";
  152. 4350  COLOR 7,0
  153. 4360  LOCATE 12,10:PRINT "     The IBM Personal Computer plays a range of seven";
  154. 4370  LOCATE 13,10:PRINT "musical octaves. You may choose to have your random";
  155. 4380  LOCATE 14,10:PRINT "music piece wander completely randomly through the";
  156. 4390  LOCATE 15,10:PRINT "seven octaves--`fully random'--or you may make the";
  157. 4400  LOCATE 16,10:PRINT "music sound more `normal' by `center-weighting' the";
  158. 4410  LOCATE 17,10:PRINT "piece with a greater distribution of notes in the";
  159. 4420  LOCATE 18,10:PRINT "middle ranges of the scale.  ";
  160. 4430  LOCATE 20,10:PRINT "     Don't worry if you choose `Center-weighted'--";
  161. 4440  LOCATE 21,10:PRINT "it will still sound random!";
  162. 4450  GOTO 4150
  163. 5000  '
  164. 5010  ' here it comes
  165. 5020  '
  166. 5030  CLS
  167. 5040  COLOR 7,0:LOCATE 8,30:PRINT "AND NOW...";
  168. 5050  LOCATE 12, 32: PRINT "RANDOM MUSIC!";
  169. 5060  FOR DELAY=1 TO 1200:NEXT DELAY
  170. 5070  GOTO 8000
  171. 8000  CLS
  172. 8010  FOR D=1 TO DD
  173. 8020  RANDOMIZE VAL(RIGHT$(TIME$,2))
  174. 8030   PLAY "mf":'set length of note
  175. 8040  L=INT(RND*9)
  176. 8050  IF L=0 THEN PLAY "L11
  177. 8060  IF L=1 THEN PLAY "L1
  178. 8070  IF L=2 THEN PLAY "L2
  179. 8080  IF L=3 THEN PLAY "L4
  180. 8090  IF L=4 THEN PLAY "L8
  181. 8100  IF L=5 THEN PLAY "L16
  182. 8110  IF L=6 THEN PLAY "L32
  183. 8120  IF L=7 THEN PLAY "L64
  184. 8130  IF L=8 THEN PLAY "L21
  185. 8140  '
  186. 8150  '
  187. 8160  'set octave
  188. 8170  IF DIST$="F" OR DIST$="f" THEN GOTO 8500
  189. 8180  IF DIST$="C" OR DIST$="c" THEN GOTO 8200
  190. 8190  'centered dsitribution
  191. 8200  O1=INT(RND*4)
  192. 8210  O2=INT(RND*4)
  193. 8220  O=O1+O2
  194. 8230  IF O=0 THEN PLAY "O0
  195. 8240  IF O=1 THEN PLAY "O1
  196. 8250  IF O=2 THEN PLAY "O2
  197. 8260  IF O=3 THEN PLAY "O3
  198. 8270  IF O=4 THEN PLAY "O4
  199. 8280  IF O=5 THEN PLAY "O5
  200. 8290  IF O=6 THEN PLAY "O6
  201. 8300  GOTO 8600
  202. 8500  'fully random distribution
  203. 8510  O=INT(RND*7)
  204. 8520  IF O=0 THEN PLAY "O0
  205. 8530  IF O=1 THEN PLAY "O1
  206. 8540  IF O=2 THEN PLAY "O2
  207. 8550  IF O=3 THEN PLAY "O3
  208. 8560  IF O=4 THEN PLAY "O4
  209. 8570  IF O=5 THEN PLAY "O5
  210. 8580  IF O=6 THEN PLAY "O6
  211. 8590  '
  212. 8600  'set note
  213. 8610  N=INT(RND*13)
  214. 8620  IF N=0 THEN PLAY "P4
  215. 8630  IF N=1 THEN PLAY "C
  216. 8640  IF N=2 THEN PLAY "C+
  217. 8650  IF N=3 THEN PLAY "D
  218. 8660  IF N=4 THEN PLAY "D+
  219. 8670  IF N=5 THEN PLAY "E
  220. 8680  IF N=6 THEN PLAY "F
  221. 8690  IF N=7 THEN PLAY "F+
  222. 8700  IF N=8 THEN PLAY "G
  223. 8710  IF N=9 THEN PLAY "G+
  224. 8720  IF N=10 THEN PLAY "A
  225. 8730  IF N=11 THEN PLAY "A+
  226. 8740  IF N=12 THEN PLAY "B
  227. 8750  '
  228. 8760  ' put visual on the screen
  229. 8770  R=INT((RND*24)+1)
  230. 8780  C=INT((RND*80)+1)
  231. 8790  LOCATE R,C
  232. 8800   PRINT CHR$(14);
  233. 8810  NEXT D
  234. 8820  '
  235. 8830  'ask for another go-round
  236. 8840  '
  237. 8850  FOR DELAY=1 TO 3000:NEXT DELAY
  238. 8860  CLS
  239. 8870  LOCATE 8, 24:PRINT "Would you like to hear another random tune?";
  240. 8880  LOCATE 10,24:COLOR 15,0:PRINT "Y";
  241. 8890  LOCATE 10,30:COLOR  7,0:PRINT "Yes";
  242. 8900  LOCATE 12,24:COLOR 15,0:PRINT "N";
  243. 8910  LOCATE 12,30:COLOR 7,0:PRINT "No thanks";
  244. 8920  R$=INKEY$: IF R$="" THEN GOTO 8920
  245. 8930  IF R$="Y" OR R$="y" THEN GOTO 9400
  246. 8940  IF R$="N" OR R$="n" THEN GOTO 9200
  247. 8950  GOTO 8920
  248. 9200  CLS
  249. 9210  LOCATE 12,40:PRINT "Bye!";
  250. 9220  LOCATE 22:PRINT " ";
  251. 9230  END
  252. 9400  CLS
  253. 9410  LOCATE 8,24:PRINT "Do you wish to define new parameters for you next tune?";
  254. 9420  LOCATE 10,24:COLOR 15,0:PRINT "Y";
  255. 9430  LOCATE 10,30:COLOR 7,0:PRINT "Yes";
  256. 9440  LOCATE 12,24:COLOR 15,0:PRINT "N";
  257. 9450  LOCATE 12,30:COLOR 7,0:PRINT "No";
  258. 9460  R2$=INKEY$:IF R2$="" THEN GOTO 9460
  259. 9470  IF R2$="Y" OR R2$="y" THEN GOTO 2000
  260. 9480  IF R2$="N" OR R2$="n" THEN GOTO 5000
  261. 9490  GOTO 9460
  262.